#ifndef B2D_IGRAPHICCONTEXT_H
#define B2D_IGRAPHICCONTEXT_H

#include "IUncopyable.h"

NS_B2D_BEGIN

class BaseWindow;
struct WindowOptions;

////////////////////////////////////////////////////////////////////////////////////////////////////
/// \brief	Interface for graphic context
////////////////////////////////////////////////////////////////////////////////////////////////////
class B2D_API IGraphicContext
	: public IUncopyable
{
	B2D_INTERFACE(IGraphicContext)

public:
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Initialises this context.
	///
	/// \param	window			The window.
	/// \param [in,out]	opts	Options for window.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void initialise(const BaseWindow& window, WindowOptions& opts) = 0;
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Destroys this context.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void destroy(void) = 0;

	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Swaps buffers.
	///
	/// \param	vSync	true to synchronise.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void swapBuffers(bool vSync) = 0;
	////////////////////////////////////////////////////////////////////////////////////////////////////
	/// \brief	Makes this the current context.
	////////////////////////////////////////////////////////////////////////////////////////////////////
	virtual void makeCurrent(void) = 0;
};

NS_B2D_END

#endif